home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / lisp / kcl / kcl.lha / h / vs.h < prev   
Text File  |  1987-06-04  |  1KB  |  56 lines

  1. /*
  2. (c) Copyright Taiichi Yuasa and Masami Hagiya, 1984.  All rights reserved.
  3. Copying of this file is authorized to users who have executed the true and
  4. proper "License Agreement for Kyoto Common LISP" with SIGLISP.
  5. */
  6.  
  7. /*
  8.     vs.h
  9.  
  10.     value stack
  11. */
  12.  
  13. /*
  14. #define    VSSIZE        2048
  15. */
  16.                     /*  value stack size  */
  17. #define    VSGETA        128        /*  value stack geta  */
  18.  
  19.  
  20. object value_stack[VSSIZE + 2*VSGETA];
  21.  
  22. #define    vs_org        value_stack
  23.  
  24. object *vs_limit;    /*  value stack limit  */
  25.  
  26. object *vs_base;    /*  value stack base  */
  27. object *vs_top;        /*  value stack top  */
  28.  
  29. #define    vs_push(obje)    (*vs_top++ = (obje))
  30.  
  31. #define    vs_pop        (*--vs_top)
  32. #define    vs_head        vs_top[-1]
  33.  
  34. #define    vs_mark        object *old_vs_top = vs_top
  35. #define    vs_reset    vs_top = old_vs_top
  36.  
  37. #define    vs_check    if (vs_top >= vs_limit)  \
  38.                 vs_overflow()
  39.  
  40. #define    vs_check_push(obje)  \
  41.             (vs_top >= vs_limit ?  \
  42.              (object)vs_overflow() : (*vs_top++ = (obje)))
  43.  
  44. #define    check_arg(n)  \
  45.             if (vs_top - vs_base != (n))  \
  46.                 check_arg_failed(n)
  47.  
  48. #define    MMcheck_arg(n)  \
  49.             if (vs_top - vs_base < (n))  \
  50.                 too_few_arguments();  \
  51.             else if (vs_top - vs_base > (n))  \
  52.                 too_many_arguments()
  53.  
  54. #define vs_reserve(x)    if(vs_base+(x) >= vs_limit)  \
  55.                 vs_overflow();
  56.